﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SksApp.Bussiness;

namespace SksApp
{
    public partial class PosView : BaseView
    {
        #region Class
        private class ButtonImage
        {
            public string Name { get; set; }
            public string DisplayName { get; set; }
            public int PageNumber { get; set; }
            public int ID { get; set; }
            public string ImagePath { get; set; }
        }
        #endregion

        #region Property & Fields
        private delegate void SetTextCallback(string text, string errorText, Color foreColor);
        private List<HareketSatiri> Lines = new List<HareketSatiri>();
        private Musteri SecilenMusteri = null;
        Dictionary<OdemeTipi, decimal> Odemeler = new Dictionary<OdemeTipi, decimal>();
        private int BekleyenReferansNo = -1;
        private int AktifFiyatNo = 1;
        private int AktifSaticiKodu = -1;
        private string AktifSaticiAdi = string.Empty;
        List<ButtonImage> _images = new List<ButtonImage>();
        List<OdemeTipi> OdemeTipleri;

        private enum Fonksiyon : byte
        {
            Satis = 0,
            FiyatGor = 1,
            SatirIptal = 2,
            NakitGiris = 3,
            NakitCikis = 4,
            AraToplam = 5
        }

        private enum IslemCinsleri : byte
        {
            NormalSatir = 0,
            IptalSatir = 1,
            KampanyaSatir = 2
        }
        private Fonksiyon FonksiyonCinsi { get; set; }
        private Fonksiyon OncekiFonksiyonCinsi { get; set; }
        private EvrakCinsleri _evrak_cinsi = EvrakCinsleri.Fis;
        private EvrakCinsleri EvrakCinsi
        {
            get
            {
                return _evrak_cinsi;
            }
            set
            {
                lblBelgeTipi.Text = value.GetDescription();
                _evrak_cinsi = value;
            }
        }
        private IslemCinsleri IslemCinsi { get; set; }
        public KeyProcess KeyProc;
        #endregion

        #region Ctor
        public PosView()
        {
            InitializeComponent();
            this.Load += new EventHandler(PosView_Load);
        }
        #endregion

        #region Event
        void PosView_Load(object sender, EventArgs e)
        {
            txtInput.Focus();
            UrunGrupYukle();
            grdData.Columns.Add("Miktar", "Miktar");
            grdData.Columns.Add("Birim", "Birim");
            grdData.Columns.Add("UrunAdi", "Ürün Adı");
            grdData.Columns.Add("Tutar", "Tutar");
            grdData.Columns[0].Width = 50;
            grdData.Columns[1].Width = 40;
            grdData.Columns[2].Width = 200;
            grdData.Columns[3].Width = 50;
            grdData.Columns.Add("Data", "Data");
            grdData.Columns[4].Visible = false;
            doubleBufferedTableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;

            lblAraToplam.Text = decimal.Zero.ToString("n2");
            lblIndirim.Text = decimal.Zero.ToString("n2");
            lblKdv.Text = decimal.Zero.ToString("n2");
            lblYekun.Text = decimal.Zero.ToString("n2");
            lblOdenen.Text = decimal.Zero.ToString("n2");
            lblParaustu.Text = decimal.Zero.ToString("n2");

            using (SksEntity ent = new SksEntity())
            {
                OdemeTipleri = ent.OdemeTipleri.ToList();
            }

        }
        private void btnCikis_Click(object sender, EventArgs e)
        {
            this.Dispose();
            Event.Invoke(null, null);
        }
        private void RightPanelButtonClick(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            SetText(btn.Tag.ToString());
        }
        private void btnGrpClick(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            if (btn != null)
            {
                HizliTusYukle(Cevir.Parse<int>(btn.Tag));
            }
        }
        private void btnMusteri_Click(object sender, EventArgs e)
        {
            frmListe liste = new frmListe();
            liste.ListeTipi = frmListe.ListeTipleri.CariListesi;
            if (liste.ShowDialog() == DialogResult.OK)
            {
                CariBul(Cevir.Parse<int>(liste.ResultValue));
            }
        }
        private void btnUrun_Click(object sender, EventArgs e)
        {
            frmListe liste = new frmListe();
            liste.ListeTipi = frmListe.ListeTipleri.StokListesi;
            if (liste.ShowDialog() == DialogResult.OK)
            {
                string secilenBarkod = liste.ResultValue;
                decimal miktar = 1;
                if (txtInput.Text.IndexOf('x') > -1)
                    miktar = decimal.Parse(txtInput.Text.Split('x')[0]);
                UrunBul(secilenBarkod, miktar);
            }
        }
        private void txtInput_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (txtInput.Text.IndexOf('*') > -1)
                {
                    bool devam = true;
                    //if (Security.Get.MiktarliSatisIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();
                    //else if (Security.Get.MiktarliSatisIslemi == Security.Durum.Onaysiz)
                    //    devam = false;

                    if (devam)
                    {
                        UrunBul(txtInput.Text.Split('*')[1], decimal.Parse(txtInput.Text.Split('*')[0]));
                        SatisaGeridon();
                    }
                    else
                    {
                        //frmDialog uyari = new frmDialog("Uyarı", "Miktarlı Satışa Yetkiniz yok!");
                        //uyari.ShowDialog();
                    }
                }
                else
                    UrunBul(txtInput.Text, 1);
            }
            else if (e.KeyCode == Keys.Escape)
            {
                SatisaGeridon();
            }
        }
        private void btnShortClick(object sender, EventArgs e)
        {
            Button tus = sender as Button;
            if (tus != null && !string.IsNullOrEmpty(tus.Tag.ToString()))
            {
                decimal miktar = 1;
                if (txtInput.Text.IndexOf('x') > -1)
                    miktar = decimal.Parse(txtInput.Text.Split('x')[0]);
                UrunBul(tus.Tag.ToString(), miktar);
            }
        }
        private void btnKasaGonder_Click(object sender, EventArgs e)
        {
            KasayaSonFisGonder();
        }
        private void btnCekmece_Click(object sender, EventArgs e)
        {
            FonksiyonCalistir(Fonksiyonlar.CekmeceAc);
        }
        #endregion

        #region Method
        private void SetDisplay(string satir1, string satir2)
        {
            if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.MusteriGostergePortu)))
            {
                Display.Get.WriteFirstLine(satir1);
                Display.Get.WriteSecondLine(satir2);
            }
        }
        public void FonksiyonCalistir(Fonksiyonlar SecilenFonksiyon)
        {
            bool devam = true;
            frmInputDialog dlg2 = null;
            switch (SecilenFonksiyon)
            {
                case Fonksiyonlar.CekmeceAc:
                    Cekmece.Ac();
                    break;
                case Fonksiyonlar.FisBelge:
                    devam = true;
                    //if (Security.Get.SatisIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //if (new frmDialog("Dikkat", "Evrak Tipini Fiş'e çevirmek istediğinize eminmisiniz ?").ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        this.EvrakCinsi = EvrakCinsleri.Fis;
                    }
                    break;
                case Fonksiyonlar.IadeBelge:
                    devam = true;
                    //if (Security.Get.IadeIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //if (new frmDialog("Dikkat", "Evrak Tipini İADE'ye çevirmek istediğinize eminmisiniz ?").ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        this.EvrakCinsi = EvrakCinsleri.Iade;
                    }
                    break;
                case Fonksiyonlar.FaturaBelge:
                    devam = true;
                    //if (Security.Get.FaturaIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //if (new frmDialog("Dikkat", "Evrak Tipini FATURA'ya çevirmek istediğinize eminmisiniz ?").ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        this.EvrakCinsi = EvrakCinsleri.Fatura;
                    }
                    break;
                case Fonksiyonlar.KasaRaporu:
                    devam = true;
                    //if (Security.Get.RaporAlmaIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //RaporHazirla();
                    }
                    break;
                case Fonksiyonlar.GunlukKasiyerRaporuGoruntule:
                    devam = true;
                    //if (Security.Get.RaporAlmaIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //using (frmTarih frm = new frmTarih())
                        //{
                        //    frm.RaporTipi = RaporTipleri.GunlukKasiyerRaporu;
                        //    frm.ShowDialog();
                        //}
                    }
                    break;
                case Fonksiyonlar.GunlukKasaRaporuGoruntule:
                    devam = true;
                    //if (Security.Get.RaporAlmaIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        //using (frmTarih frm = new frmTarih())
                        //{
                        //    frm.RaporTipi = RaporTipleri.GunlukKasaRaporu;
                        //    frm.ShowDialog();
                        //}
                    }
                    break;
                case Fonksiyonlar.MasrafOraniGiris:
                    dlg2 = new frmInputDialog(frmInputDialog.ListeTipleri.MasrafOran);
                    if (dlg2.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
                    {
                        //SubTotals["masraf"].Tutar = SubTotals["toplam"].Tutar * Conversion.Parse<decimal>(dlg2.resultValue) / 100;
                        CalcSubTotal();
                    }
                    break;
                case Fonksiyonlar.MasrafTutariGiris:
                    dlg2 = new frmInputDialog(frmInputDialog.ListeTipleri.MasrafTutar);
                    if (dlg2.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
                    {
                        //SubTotals["masraf"].Tutar = Conversion.Parse<decimal>(dlg2.resultValue);
                        CalcSubTotal();
                    }
                    break;
                case Fonksiyonlar.IskontoOranGiris:
                    devam = true;
                    dlg2 = new frmInputDialog(frmInputDialog.ListeTipleri.IskontoOran);
                    //if (Security.Get.FiseYuzdeIndirim == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        if (dlg2.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
                        {
                            //if (Security.Get.FisYuzdeIndirimLimitKontrol(Conversion.Parse<decimal>(dlg2.resultValue)))
                            //{
                            //    if (Conversion.Parse<decimal>(dlg2.resultValue) < 100)
                            //    {
                            //        SubTotals["geneliskonto"].Tutar = (SubTotals["toplam"].Tutar - SubTotals["kampanyaiskonto"].Tutar) * Conversion.Parse<decimal>(dlg2.resultValue) / 100;
                            //        CalcSubTotal();
                            //    }
                            //    else
                            //        MessageBox.Show("Hatalı İskonto Oranı !");
                            //}
                        }
                    }
                    break;
                case Fonksiyonlar.IskontoTutarGiris:
                    devam = true;
                    dlg2 = new frmInputDialog(frmInputDialog.ListeTipleri.IskontoTutar);

                    //if (Security.Get.FiseTutarIndirim == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        if (dlg2.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
                        {
                            //if (Security.Get.FisYuzdeIndirimLimitKontrol(Conversion.Parse<decimal>(dlg2.resultValue) * 100m / SubTotals["yekun"].Tutar))
                            //{
                            if (Cevir.Parse<decimal>(dlg2.resultValue) < Lines.Select(x => x.Tutar).Sum())
                            {
                                lblIndirim.Text = Cevir.Parse<decimal>(dlg2.resultValue).ToString("n2");
                                CalcSubTotal();
                            }
                            else
                                MessageBox.Show("Hatalı İskonto Tutarı !");
                            //}
                        }
                    }
                    break;
                case Fonksiyonlar.ProgramKapat:
                    //if (Lines.Count <= 0)
                    //    Application.Exit();
                    //else
                    //{
                    //    if (Security.Get.AktifKasa.FisIptaliYapabilir)
                    //    {
                    //        devam = true;
                    //        if (Security.Get.FisIptalIslemi == Security.Durum.SifreOnayli)
                    //            devam = Security.Get.AdminSifreKontrol();
                    //        else if (Security.Get.FisIptalIslemi == Security.Durum.Onaysiz)
                    //            devam = false;
                    //        if (!devam)
                    //        {
                    //            frmDialog uyari = new frmDialog("Uyarı", "Evrağı Bitirmeden Çıkamazsınız!");
                    //            uyari.ShowDialog();
                    //        }
                    //        else
                    //        {
                    //            frmDialog msg = new frmDialog("Uyarı", "Evrağı bitirmeden programdan çıkmak istediğinize eminmisiniz ?");
                    //            if (msg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    //                Application.Exit();
                    //        }
                    //    }

                    //}
                    break;
                case Fonksiyonlar.FiyatGirisi:
                    devam = true;
                    dlg2 = new frmInputDialog(frmInputDialog.ListeTipleri.FiyatGirisi);

                    //if (Security.Get.ElleFiyatGirisIslemi == Security.Durum.SifreOnayli)
                    //    devam = Security.Get.AdminSifreKontrol();

                    if (devam)
                    {
                        if (dlg2.ShowDialog() == System.Windows.Forms.DialogResult.Yes)
                        {
                            if (Cevir.Parse<decimal>(dlg2.resultValue) > 0)
                            {
                                //var hr = Lines[gridView1.FocusedRowHandle];
                                //hr.Fiyat = Conversion.Parse<decimal>(dlg2.resultValue);
                                //hr.Tutar = hr.Fiyat * hr.Miktar;
                                //gridView1.RefreshData();
                                CalcSubTotal();
                            }
                        }
                    }
                    break;
                case Fonksiyonlar.RafEtiketBaski:
                    EtiketBas(true);
                    break;
                case Fonksiyonlar.UrunEtiketBaski:
                    EtiketBas(false);
                    break;
                case Fonksiyonlar.PluGonder:
                    new Yazarkasa().StokGonder();
                    break;
                case Fonksiyonlar.Departmangonder:
                    new Yazarkasa().DepartmanGonder();
                    break;
                case Fonksiyonlar.FiyatNo1:
                    FiyatGuncelle(1, true);
                    break;
                case Fonksiyonlar.FiyatNo2:
                    FiyatGuncelle(2, true);
                    break;
                case Fonksiyonlar.FiyatNo3:
                    FiyatGuncelle(3, true);
                    break;
                case Fonksiyonlar.FiyatNo4:
                    FiyatGuncelle(4, true);
                    break;
                case Fonksiyonlar.FiyatNo5:
                    FiyatGuncelle(5, true);
                    break;
                case Fonksiyonlar.FiyatNo6:
                    FiyatGuncelle(6, true);
                    break;
                case Fonksiyonlar.FiyatNo7:
                    FiyatGuncelle(7, true);
                    break;
                case Fonksiyonlar.FiyatNo8:
                    FiyatGuncelle(8, true);
                    break;
                case Fonksiyonlar.FiyatNo9:
                    FiyatGuncelle(9, true);
                    break;
                case Fonksiyonlar.FiyatNo10:
                    FiyatGuncelle(10, true);
                    break;
                case Fonksiyonlar.TeraziyeVeriGonder:
                    Terazi tr = new Terazi();
                    tr.veriGonder();
                    break;
            }
        }
        private void FiyatGuncelle(int fiyatNo, bool uyariver)
        {
            if (uyariver)
            {
                //if (SubTotals["geneliskonto"].Tutar > 0 || SubTotals["masraf"].Tutar > 0)
                //{
                //    using (frmDialog dlg = new frmDialog("Uyarı", "İndirim veya Masraf oranlarını yeniden girmelisiniz ! devam etmek istermisiniz ?"))
                //    {
                //        if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                //            return;
                //    }
                //}
                //SubTotals["geneliskonto"].Tutar = 0;
                //SubTotals["masraf"].Tutar = 0;
            }

            AktifFiyatNo = fiyatNo;
            foreach (var result in Lines)
            {
                decimal fiyat = 0;
                switch (AktifFiyatNo)
                {
                    case 1:
                        fiyat = result.Urun.Fiyat1;
                        break;
                    case 2:
                        fiyat = result.Urun.Fiyat2;
                        break;
                    case 3:
                        fiyat = result.Urun.Fiyat3;
                        break;
                    case 4:
                        fiyat = result.Urun.Fiyat4;
                        break;
                    case 5:
                        fiyat = result.Urun.Fiyat5;
                        break;
                    default:
                        fiyat = result.Urun.Fiyat1;
                        break;
                }

                if (fiyat <= 0)
                {
                    fiyat = result.Urun.Fiyat1;
                }

                result.Fiyat = Cevir.Parse<decimal>(fiyat * result.Barkod.Katsayi);
                result.Tutar = Cevir.Parse<decimal>(fiyat * result.Miktar * result.Barkod.Katsayi);
            }

            CalcSubTotal();
        }
        private void EtiketBas(bool RafEtiketi)
        {
            BindingList<Etiket> etiketler = new BindingList<Etiket>();
            string printerName = string.Empty;
            ReportTypeOption op = ReportTypeOption.Raf13Etiket;
            printerName = Settings.Instance.GetValue(Information.EtiketYazicisi);
            decimal kgfiyat = 0;

            foreach (var item in Lines)
            {
                if (item.Barkod.NetAgirlik > 0) kgfiyat = item.Urun.Fiyat1 / item.Barkod.NetAgirlik; else kgfiyat = 0;

                if (RafEtiketi)
                {
                    if (item.Barkod.Barkodu.Length >= 13)
                        op = ReportTypeOption.Raf13Etiket;
                    else
                        op = ReportTypeOption.Raf8Etiket;
                }
                else
                {
                    if (item.Barkod.Barkodu.Length >= 13)
                        op = ReportTypeOption.Urun13Etiket;
                    else
                        op = ReportTypeOption.Urun8Etiket;
                }

                for (int i = 0; i < item.Miktar; i++)
                {
                    etiketler.Add(new Etiket()
                    {
                        Adi = item.UrunAdi,
                        Barkod = item.Barkod.Barkodu,
                        Fiyat1 = item.Urun.Fiyat1,
                        Fiyat2 = item.Urun.Fiyat2,
                        Fiyat3 = item.Urun.Fiyat3,
                        Fiyat4 = item.Urun.Fiyat4,
                        Fiyat5 = item.Urun.Fiyat5,
                        KdvOrani = item.KdvOrani,
                        Kodu = item.Urun.Kodu,
                        NetAgirlik = item.Barkod.NetAgirlik,
                        KgFiyati = kgfiyat,
                        MagazaAdi = Security.Get.AktifMagaza.Adi,
                        MagazaNo = Security.Get.AktifMagaza.No,
                        //DovizCinsi = item.Urun.DovizCinsi;
                    });
                }

                using (FastReport.Report report = ReportTemplate.GetReport(op))
                {
                    if (string.IsNullOrEmpty(printerName))
                    {
                        if (System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count > 0)
                        {
                            System.Windows.Forms.BindingSource binding = new System.Windows.Forms.BindingSource { DataSource = etiketler };
                            report.RegisterData(binding, "Invoice", 10);
                            report.GetDataSource("Invoice").Enabled = true;
                            report.Prepare();
                            report.Print();
                        }
                        //DotMatrixPrint.Print(report, new System.Windows.Forms.BindingSource { DataSource = etiketler }, "Products", System.Drawing.Printing.PrinterSettings.InstalledPrinters[0]);
                        else
                            MessageBox.Show("Tanımlı Yazıcı bulunamadı !");
                    }
                    else
                    {
                        System.Windows.Forms.BindingSource binding = new System.Windows.Forms.BindingSource { DataSource = etiketler };
                        report.RegisterData(binding, "Invoice", 10);
                        report.GetDataSource("Invoice").Enabled = true;
                        report.Prepare();
                        report.PrintPrepared(new System.Drawing.Printing.PrinterSettings { PrinterName = printerName });
                        //DotMatrixPrint.Print(report, new System.Windows.Forms.BindingSource { DataSource = etiketler }, "Products", printerName);
                    }
                    //DotMatrixPrint.Print(report, new System.Windows.Forms.BindingSource { DataSource = etiketler }, "Products", printerName);
                }
                etiketler.Clear();
            }

            //NewScreen();
        }
        private void SetText(string cmd)
        {
            switch (cmd)
            {
                case "ok":
                    if (txtInput.Text.IndexOf('x') > -1)
                    {
                        UrunBul(txtInput.Text.Split('x')[1], decimal.Parse(txtInput.Text.Split('x')[0]));
                    }
                    else
                    {
                        UrunBul(txtInput.Text, 1);
                    }
                    break;
                case "<":
                    if (txtInput.TextLength > 0)
                    {
                        txtInput.Text = txtInput.Text.Remove(txtInput.TextLength - 1, 1);
                    }
                    break;
                case "x":
                    if (txtInput.Text.IndexOf('x') <= -1)
                    {
                        txtInput.Text += cmd;
                    }
                    break;
                case ",":
                    if (txtInput.Text.IndexOf(',') <= -1)
                    {
                        txtInput.Text += cmd;
                    }
                    break;
                default:
                    txtInput.Text += cmd;
                    break;
            }
            txtInput.Select(txtInput.Text.Length, 0);
        }
        private void UrunGrupYukle()
        {
            using (SksEntity ent = new SksEntity())
            {
                var grp = ent.UrunGruplari.ToList();
                foreach (var item in grp)
                {
                    SetGroupName(item.No, item.Adi);
                }
            }
            HizliTusYukle(1);
        }
        private void SetGroupName(int no, string name)
        {
            Button btn = (Button)pnlGroup.Controls.Find("btnGrp" + no.ToString(), false).FirstOrDefault();
            if (btn != null)
            {
                btn.Text = name;
                btn.Tag = no;
            }
        }
        private void HizliTusYukle(int groupNo)
        {
            for (int i = 1; i < 17; i++)
            {
                Button btn = (Button)pnlShortKey.Controls.Find("btnShort" + i.ToString(), false).FirstOrDefault();
                if (btn != null)
                {
                    btn.Text = "";
                    btn.Tag = "";
                }
            }

            using (SksEntity ent = new SksEntity())
            {
                var list = ent.Tuslar.Where(x => x.GroupNo == groupNo).ToList();
                int num = 1;
                foreach (var item in list)
                {
                    SetHizliTus(item, num);
                    num++;
                }
            }
        }
        private void SetHizliTus(Tus tus, int no)
        {
            Button btn = (Button)pnlShortKey.Controls.Find("btnShort" + no.ToString(), false).FirstOrDefault();
            if (btn != null)
            {
                btn.Text = tus.Adi;
                btn.Tag = tus.Barkod;
            }
        }
        private void CariBul(int cariID)
        {
            using (SksEntity ent = new SksEntity())
            {
                var cari = ent.Musteriler.Where(x => x.ID == cariID).FirstOrDefault();
                if (cari != null)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine(cari.Adi);
                    sb.AppendLine(cari.Adres);
                    sb.AppendLine(cari.VergiDairesi + "/" + cari.VergiNo);
                    lblMusteri.Text = sb.ToString();
                }
            }
        }
        private void AddGrid(HareketSatiri hr)
        {
            grdData.Rows.Add(hr.Miktar, hr.Birim, hr.UrunAdi, hr.Tutar);
        }
        private void UrunBul(string barkodu, decimal miktari)
        {
            string Barkod = barkodu;
            decimal miktar = miktari;
            BarkodVeri veri = BarkodCevirim.Parse(Barkod);
            if (veri.Miktar > 0)
            {
                Barkod = veri.Barkod;
                miktar = veri.Miktar;
            }
            if (miktar <= 0)
                return;

            using (SksEntity ent = new SksEntity())
            {
                var brkd = ent.Barkodlar.Where(x => x.Barkodu == Barkod).FirstOrDefault();
                if (brkd != null)
                {
                    var stk = (from s in ent.Stoklar
                               join v in ent.VergiOranlari on s.VergiID equals v.ID
                               select new { s, v }).FirstOrDefault();
                    if (stk != null)
                    {
                        decimal fiyat = Cevir.Parse<decimal>(stk.s.Fiyat1);
                        if (veri.FiyatKullanildi)
                        {
                            fiyat = miktar;
                            miktar = 1;
                        }

                        if (this.FonksiyonCinsi == Fonksiyon.FiyatGor)
                        {
                            lblAdet.Text = miktar.ToString();
                            lblUrunAdi.Text = stk.s.Adi;
                            lblTutar.Text = (fiyat * miktar).ToString(Security.Get.DecimalFormat());
                            lblFiyat.Text = fiyat.ToString("n2");

                            SetDisplay(lblUrunAdi.Text, lblTutar.Text); //müşteri göstergesi

                            txtInput.Text = string.Empty;
                            btnFiyatGor.Enabled = true;
                            FonksiyonCinsi = OncekiFonksiyonCinsi;
                        }
                        else if (this.FonksiyonCinsi == Fonksiyon.SatirIptal)
                        {
                            decimal silmiktar = 0;
                            decimal kalanMiktar = miktar;
                            List<HareketSatiri> removeLine = new List<HareketSatiri>();
                            foreach (HareketSatiri line in Lines.OrderByDescending(x => x.ID))
                            {
                                if (line.Barkod.Barkodu.Trim() == Barkod.Trim())
                                {
                                    if (kalanMiktar > line.Miktar)
                                    {
                                        removeLine.Add(line);
                                        kalanMiktar -= line.Miktar;
                                    }
                                    else if (kalanMiktar == line.Miktar)
                                    {
                                        removeLine.Add(line);
                                        kalanMiktar = 0;
                                        break;
                                    }
                                    else
                                    {
                                        silmiktar += kalanMiktar;
                                        line.Miktar -= kalanMiktar;
                                        line.Tutar -= (kalanMiktar * line.Fiyat);
                                        grdData[0, line.ID].Value = line.Miktar;
                                        grdData[3, line.ID].Value = line.Tutar;
                                        break;
                                    }
                                }
                            }

                            if (removeLine.Count > 0)
                            {
                                foreach (HareketSatiri line in removeLine)
                                {
                                    silmiktar += line.Miktar;
                                    grdData.Rows.RemoveAt(line.ID);
                                    Lines.Remove(line);
                                }
                            }

                            if (silmiktar > 0)
                            {
                                lblAdet.Text = (-1 * silmiktar).ToString();
                                lblUrunAdi.Text = stk.s.Adi;
                                lblFiyat.Text = stk.s.Fiyat1.ToString("n2");
                                lblTutar.Text = (-1 * fiyat * silmiktar).ToString(Security.Get.DecimalFormat());
                                txtInput.Text = string.Empty;

                                SetDisplay(lblUrunAdi.Text, lblTutar.Text);
                            }
                            else
                            {
                                lblAdet.Text = "";
                                lblTutar.Text = "";
                                lblUrunAdi.Text = "Ürün Bulunamadı !";
                                Sounds.beepTime();
                            }
                            //btnSatirIptal.Enabled = true;
                            FonksiyonCinsi = OncekiFonksiyonCinsi;
                            CalcSubTotal();
                        }
                        else
                        {
                            if (fiyat <= 0)
                            {
                                btnFiyatGor.Enabled = true;
                                lblUrunAdi.Text = "Ürünün Fiyatı Sıfır";
                                txtInput.Text = string.Empty;
                                lblAdet.Text = string.Empty;
                                lblFiyat.Text = string.Empty;
                                lblTutar.Text = string.Empty;
                                Sounds.beepTime();
                                return;
                            }

                            decimal katsayi = Cevir.Parse<decimal>(brkd.Katsayi);
                            Lines.Add(new HareketSatiri() { ID = Lines.Count, Barkod = brkd, Fiyat = fiyat * katsayi, Miktar = miktar, Tutar = fiyat * miktar * katsayi, Urun = stk.s, UrunAdi = stk.s.Adi, Birim = brkd.BirimAdi, KdvID = stk.s.VergiID, KdvOrani = stk.v.Oran });

                            decimal mk = miktar * katsayi;
                            string ttr = (fiyat * miktar * katsayi).ToString(Security.Get.DecimalFormat());
                            string mesaj = "";
                            if (mk > 1)
                            {
                                mesaj = mk + " " + brkd.BirimAdi;
                                mesaj = mesaj.PadRight(20 - ttr.Length) + ttr;
                            }
                            else
                            {
                                mesaj = ttr;
                            }

                            SetDisplay(stk.s.Adi, mesaj);
                            AddGrid(Lines[Lines.Count - 1]);
                            DisplayShow(grdData.RowCount - 1);
                            txtInput.Text = string.Empty;
                            CalcSubTotal();
                        }
                    }
                }
                else //ürün bulunamazsa
                {
                    btnFiyatGor.Enabled = true;
                    lblUrunAdi.Text = "Ürün Bulunamadı !";

                    SetDisplay("URUN BULUNAMADI !".PadRight(20), " ");

                    txtInput.Text = string.Empty;
                    lblAdet.Text = string.Empty;
                    lblFiyat.Text = string.Empty;
                    lblTutar.Text = string.Empty;
                    Sounds.beepTime();
                }
            }
        }
        private void SatisaGeridon()
        {
            btnFiyatGor.Enabled = true;
            //btnSatirIptal.Enabled = true;
            this.FonksiyonCinsi = Fonksiyon.Satis;
            lblTutar.BackColor = Color.Transparent;
            //SubTotals["odeme"].Tutar = 0;
            //SubTotals["paraustu"].Tutar = 0;
            //OdemeTusAktif(false);
        }
        private void KasayaSonFisGonder()
        {
            //try
            //{
            //    Yazarkasa ks = new Yazarkasa();
            //    ks.EvrakTipi = LastDoc._evrak_cinsi;
            //    if (LastDoc.SecilenMusteri != null)
            //    {
            //        ks.Musteri = LastDoc.SecilenMusteri;
            //    }
            //    ks.OdemeDetaylari = LastDoc.Odemeler;
            //    ks.Lines = LastDoc.LastLines;
            //    ks.FisGonder();
            //}
            //catch (Exception)
            //{

            //}
            //finally
            //{
            //    if (LastDoc != null && LastDoc.SecilenMusteri != null)
            //    {
            //        LastDoc.SecilenMusteri = null;
            //    }
            //    LastDoc = null;
            //}
        }
        private void DisplayShow(int index)
        {
            if (grdData.RowCount > index && index > -1)
            {
                lblAdet.Text = Convert.ToDecimal(grdData[0, index].Value).ToString();
                lblUrunAdi.Text = grdData[2, index].Value.ToString();
                lblTutar.Text = Convert.ToDecimal(grdData[3, index].Value).ToString(Security.Get.DecimalFormat());
                grdData.Rows[index].Selected = true;
            }
            else if (index == -1)
            {
                DisplayShow(grdData.RowCount - 1);
            }
            else
            {
                if (grdData.RowCount > 0)
                    DisplayShow(0);
            }
        }
        private void CalcSubTotal()
        {
            decimal araToplam = 0;
            decimal iskontoTutari = Cevir.Parse<decimal>(lblIndirim.Text);
            decimal toplam = 0;
            decimal kdvTutari = 0;
            decimal odenen = Odemeler.Values.Sum();
            decimal oran = 0;

            araToplam = Lines.Select(x => x.Tutar).Sum();
            foreach (var item in Lines)
            {
                oran = item.Tutar * 100m / araToplam;
                item.IskontoTutari = Math.Round(iskontoTutari * oran / 100, 2);
                iskontoTutari -= item.IskontoTutari;
            }

            if (Lines.Count > 0)
                Lines[Lines.Count - 1].IskontoTutari += iskontoTutari;

            foreach (var item in Lines)
            {
                item.NetTutar = item.Tutar - item.IskontoTutari;
                item.KdvTutari = Math.Round((item.NetTutar * item.KdvOrani / (100m + item.KdvOrani)), 2);
                kdvTutari += item.KdvTutari;
            }

            toplam = araToplam - Cevir.Parse<decimal>(lblIndirim.Text);

            lblAraToplam.Text = araToplam.ToString("n2");
            lblKdv.Text = kdvTutari.ToString("n2");
            lblYekun.Text = toplam.ToString("n2");
            lblOdenen.Text = odenen.ToString("n2");
            lblParaustu.Text = (odenen - toplam).ToString("n2");
        }

        private void EvrakKaydet()
        {
            try
            {
                try
                {
                    Cekmece.Ac();
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }

                DateTime tarih1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                DateTime tarih2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
                DateTime tarih = DateTime.Now;

                using (SksEntity ent = new SksEntity())
                {
                    bool varsayilanCarikullanildi = false;
                    string evrakseri = Settings.Instance.GetValue(Information.EvrakSeri);

                    int? fisNo = (from c in ent.Evraklar where c.Seri == evrakseri select (int?)c.Sira).Max();
                    if (fisNo == null)
                        fisNo = 1;
                    else
                        fisNo = fisNo.Value + 1;

                    int cariid = -1;
                    string cariKodu = "";
                    if (this.SecilenMusteri != null)
                    {
                        cariid = this.SecilenMusteri.ID;
                        cariKodu = this.SecilenMusteri.Kodu;
                    }
                    else
                    {
                        cariKodu = "PESIN";
                        varsayilanCarikullanildi = true;
                        int? id = (from c in ent.Musteriler where c.Kodu == "PESIN" select (int?)c.ID).FirstOrDefault();
                        if (id.HasValue) cariid = id.Value;
                    }

                    int kasano = Convert.ToInt32(Settings.Instance.GetValue(Information.KasaNo));
                    int kasaID = ent.Kasalar.Where(x => x.No == kasano).Select(x => x.ID).FirstOrDefault();

                    Evrak evr = new Evrak();
                    evr.AraToplam = Cevir.Parse<decimal>(lblAraToplam.Text);
                    evr.BelgeNo = "";
                    evr.CariID = cariid;
                    evr.CariKodu = cariKodu;
                    evr.EvrakCinsi = Cevir.Parse<byte>(_evrak_cinsi);
                    evr.IskontoToplam = Lines.Select(x => x.IskontoTutari).Sum();
                    evr.KasaID = Cevir.Parse<int>(Settings.Instance.GetValue(Information.KasaNo));
                    evr.KasiyerID = Security.Get.AktifKasiyer.ID;



                    OdemeTipi nakit = Odemeler.Keys.Where(x => x.Tip == 0).FirstOrDefault();
                    OdemeTipi kredi = Odemeler.Keys.Where(x => x.Tip == 1).FirstOrDefault();
                    OdemeTipi acik = Odemeler.Keys.Where(x => x.Tip == 2).FirstOrDefault();

                    if (nakit != null)
                    {
                        evr.OdemeTip1ID = nakit.ID;
                        evr.OdemeTip1Tutar = Odemeler[nakit];
                    }

                    if (kredi != null)
                    {
                        evr.OdemeTip2ID = kredi.ID;
                        evr.OdemeTip2Tutar = Odemeler[kredi];
                    }

                    if (acik != null)
                    {
                        evr.OdemeTip3ID = acik.ID;
                        evr.OdemeTip3Tutar = Odemeler[acik];
                    }

                    evr.Seri = Settings.Instance.GetValue(Information.EvrakSeri);
                    evr.Sira = fisNo.Value;
                    evr.Tarih = DateTime.Now;
                    evr.Toplam = Cevir.Parse<decimal>(lblTutar.Text);
                    evr.Vade = 0;
                    evr.VergiToplam = Lines.Select(x => x.KdvTutari).Sum();
                    evr.PuanTutari = Lines.Select(x => x.PuanTutari).Sum();
                    ent.Evraklar.Add(evr);
                    ent.SaveChanges();


                    decimal toplamPuan = 0;
                    Int16 idx = 0;
                    foreach (HareketSatiri line in Lines)
                    {
                        if (!varsayilanCarikullanildi)
                        {
                            toplamPuan += line.PuanTutari;
                        }
                        int depono = Cevir.Parse<int>(Settings.Instance.GetValue(Information.MagazaNo));

                        line.Tutar = HareketSatiri.NetFiyatHesapla(line.Tutar, line.IskontoTutari);
                        ent.HareketBilgileri.Add(new Hareket()
                        {
                            Barkod = line.Barkod.Barkodu,
                            BurutTutar = line.Miktar * line.Fiyat,
                            CikisDepoNo = depono,
                            GirisDepoNo = depono,
                            Isk1Tutar = line.IskontoTutari,
                            Isk2Tutar = 0,
                            Isk3Tutar = 0,
                            Isk4Tutar = 0,
                            Isk5Tutar = 0,
                            KdvSira = line.KdvID,
                            PuanTutari = line.PuanTutari,
                            Satir = idx,
                            SipDbcNo = 0,
                            SipRecNo = 0,
                            StokKodu = line.Urun.Kodu,
                            Vade = 0,
                            KdvTutari = line.Tutar - (line.Tutar / ((100m + line.KdvOrani) / 100m)),
                            Fiyat = line.Fiyat,
                            Miktar = line.Miktar,
                            HareketID = evr.ID,
                            KdvOrani = line.KdvOrani
                        });

                        idx++;
                    }

                    ent.SaveChanges();

                    PrintDocument(evr.ID);
                }

                //BekleyenEvrakSil();
                //SiparisKapat();
                AktifSaticiKodu = -1;
                if (!string.IsNullOrEmpty(Settings.Instance.GetValue(Information.DefaultPrice)))
                {
                    AktifFiyatNo = Cevir.Parse<int>(Settings.Instance.GetValue(Information.DefaultPrice));
                }
                else
                    AktifFiyatNo = 1;
                AktifSaticiAdi = string.Empty;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void PrintDocument(int fisID)
        {
            using (SksEntity ent = new SksEntity())
            {
                Evrak bilgi = ent.Evraklar.Where(x => x.ID == fisID).FirstOrDefault();
                if (bilgi != null)
                {
                    PrnInvoice invoice = new PrnInvoice();
                    invoice.UstBilgiler.Date = bilgi.Tarih.ToShortDateString();
                    invoice.UstBilgiler.DefaultCurrency = CurrencyOption.TL;
                    invoice.UstBilgiler.Discount = bilgi.IskontoToplam;
                    invoice.UstBilgiler.Expense = 0;
                    invoice.UstBilgiler.GeneralTotal = bilgi.Toplam;
                    invoice.UstBilgiler.InvoiceNo = bilgi.Seri + "/" + bilgi.Sira.ToString();
                    invoice.UstBilgiler.SubTotal = bilgi.AraToplam;
                    invoice.UstBilgiler.Time = bilgi.Tarih.ToShortTimeString();
                    invoice.UstBilgiler.Total = bilgi.Toplam;
                    invoice.UstBilgiler.Vat = bilgi.VergiToplam;
                    invoice.UstBilgiler.PaymentTotal = bilgi.OdemeTip1Tutar + bilgi.OdemeTip2Tutar + bilgi.OdemeTip3Tutar;
                    invoice.UstBilgiler.Remainder = bilgi.ParaUstu;
                    invoice.UstBilgiler.CurrencyToString = bilgi.Toplam.ToYaziyaCevir();
                    invoice.UstBilgiler.UNIQUEID = "";
                    invoice.UstBilgiler.PuanTutari = bilgi.PuanTutari;


                    Kasa kasa = ent.Kasalar.Where(x => x.ID == bilgi.KasaID).FirstOrDefault();
                    Kasiyer kasiyer = ent.Kasiyerler.Where(x => x.ID == bilgi.KasiyerID).FirstOrDefault();

                    if (kasa != null)
                    {
                        invoice.Cash.Code = kasa.No.ToString();
                        invoice.Cash.Id = kasa.ID;
                        invoice.Cash.Name = kasa.Aciklama;
                    }

                    if (kasiyer != null)
                    {
                        invoice.Cashier.Code = kasiyer.No.ToString();
                        invoice.Cashier.Id = kasiyer.ID;
                        invoice.Cashier.Name = kasiyer.Adi;
                    }

                    Musteri musteri = ent.Musteriler.Where(x => x.ID == bilgi.CariID).FirstOrDefault();
                    if (musteri != null)
                    {
                        invoice.Customer.Code = musteri.Kodu;
                        invoice.Customer.DiscountRate = (byte)musteri.IndirimOrani;
                        invoice.Customer.Id = musteri.ID;
                        invoice.Customer.Name = musteri.Adi;
                        invoice.Customer.Points = musteri.Puan;
                        invoice.Customer.PriceNo = (byte)musteri.FiyatNo;
                        invoice.Customer.TaxNo = musteri.VergiNo;
                        invoice.Customer.TaxOffice = musteri.VergiDairesi;
                        invoice.UstBilgiler.ToplamPuan = bilgi.PuanTutari + musteri.Puan;
                        invoice.Customer.Address = musteri.Adres;
                        invoice.Customer.Telefon = musteri.Telefon;

                    }

                    OdemeTipi nakit = Odemeler.Keys.Where(x => x.ID == bilgi.OdemeTip1ID).FirstOrDefault();
                    OdemeTipi kredi = Odemeler.Keys.Where(x => x.ID == bilgi.OdemeTip2ID).FirstOrDefault();
                    OdemeTipi acik = Odemeler.Keys.Where(x => x.ID == bilgi.OdemeTip3ID).FirstOrDefault();

                    if (nakit != null)
                    {
                        invoice.OdemeTipleri.Add(new PrnOdemeDetay()
                        {
                            Adi = nakit.Aciklama,
                            Tutar = bilgi.OdemeTip1Tutar,
                            BelgeTipi = "Nakit"
                        });
                    }

                    if (kredi != null)
                    {
                        invoice.OdemeTipleri.Add(new PrnOdemeDetay()
                        {
                            Adi = kredi.Aciklama,
                            Tutar = bilgi.OdemeTip2Tutar,
                            BelgeTipi = "Kredi Kartı"
                        });
                    }

                    if (acik != null)
                    {
                        invoice.OdemeTipleri.Add(new PrnOdemeDetay()
                        {
                            Adi = acik.Aciklama,
                            Tutar = bilgi.OdemeTip3Tutar,
                            BelgeTipi = "Açık Hesap"
                        });
                    }

                    var hareketSatirlari = (from har in ent.HareketBilgileri
                                            join stok in ent.Stoklar on har.StokKodu equals stok.Kodu
                                            join barkod in ent.Barkodlar on har.Barkod equals barkod.Barkodu
                                            where har.HareketID == bilgi.ID
                                            select new { har, StokAdi = stok.Adi, StokKodu = stok.Kodu, Barkodu = barkod.Barkodu, BirimAdi = barkod.BirimAdi, KatSayi = barkod.Katsayi }).ToList();
                    foreach (var hareket in hareketSatirlari)
                    {
                        //Stok stok = ent.Stoklar.Where(x => x.ID == har.StokId).FirstOrDefault();
                        //Barkod barkod = ent.Barkodlar.Where(x => x.ID == har.BarkodId).FirstOrDefault();
                        //Kasiyer pl = ent.Kasiyerler.Where(x => x.ID == har.SaticiId).FirstOrDefault();
                        //SerinoHareketi sn = ent.SerinoHareketleri.Where(x => x.FisNo == bilgi.FisNo && x.KasaID == bilgi.KasaId && x.BelgeTipi == bilgi.BelgeTip && x.Tarih == bilgi.Tarih && x.ID == hareket.har.ID).FirstOrDefault();


                        PrnUrun pr = new PrnUrun();
                        pr.Name = hareket.StokAdi;
                        pr.Kodu = hareket.StokKodu;
                        pr.Amount = hareket.har.Miktar;
                        pr.Barcode = hareket.Barkodu;
                        pr.DiscountTotal = hareket.har.Isk1Tutar;
                        pr.TotalPrice = hareket.har.BurutTutar;
                        pr.Unit = hareket.BirimAdi;
                        pr.UnitPrice = hareket.har.Fiyat;
                        //pr.v = Math.Round(hareket.har.Fiyat / (Conversion.Parse<decimal>(hareket.har.KdvOrani + 100) / 100m), 2);
                        pr.VatRate = hareket.har.KdvOrani;
                        pr.UnitRatio = hareket.KatSayi;

                        invoice.Products.Add(pr);
                    }

                    PrintingTypes op = PrintingTypes.Fis;
                    switch (bilgi.EvrakCinsi)
                    {
                        case 1:
                            op = PrintingTypes.Fis;
                            break;
                        case 2:
                            op = PrintingTypes.Fatura;
                            break;
                        case 3:
                            op = PrintingTypes.Iade;
                            break;
                        case 4:
                            op = PrintingTypes.Fis;
                            break;
                    }

                    try
                    {
                        DotMatrixPrint.Print(new System.Windows.Forms.BindingSource { DataSource = invoice }, op);
                    }
                    catch (Exception ex)
                    {
                        ExceptionHandling.Hand(ex);
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }
        #endregion

        private void btnSatirSil_Click(object sender, EventArgs e)
        {
            this.FonksiyonCinsi = Fonksiyon.SatirIptal;
        }

        private void btnFiyatGor_Click(object sender, EventArgs e)
        {
            this.FonksiyonCinsi = Fonksiyon.FiyatGor;
        }

        private void btnFis_Click(object sender, EventArgs e)
        {
            FonksiyonCalistir(Fonksiyonlar.FisBelge);
        }

        private void btnFatura_Click(object sender, EventArgs e)
        {
            FonksiyonCalistir(Fonksiyonlar.FaturaBelge);
        }

        private void btnIade_Click(object sender, EventArgs e)
        {
            FonksiyonCalistir(Fonksiyonlar.IadeBelge);
        }

        private void btnIndirim_Click(object sender, EventArgs e)
        {
            FonksiyonCalistir(Fonksiyonlar.IskontoTutarGiris);
        }

        private void btnTeraziGonder_Click(object sender, EventArgs e)
        {
            Terazi tr = new Terazi();
            tr.veriGonder();
        }

        private void btnEtiketYazdir_Click(object sender, EventArgs e)
        {

        }

        private void btnOdemeClick(object sender, EventArgs e)
        {
            int tip = Cevir.Parse<int>(((Button)sender).Tag);
            if (OdemeTipleri.Where(x => x.Tip == tip).Count() > 1)
            {
                frmMenu mn = new frmMenu();
                foreach (OdemeTipi item in OdemeTipleri.Where(x => x.Tip == tip))
                {
                    mn.MenuItems.Add(new MenuItem() { Aciklama = item.Aciklama, ResultCode = item.ID, Tag = item });
                }
                if (mn.ShowDialog() == DialogResult.OK)
                {
                    OdemeEkle((OdemeTipi)mn.Result.Tag, Cevir.Parse<decimal>(txtInput.Text));
                }
            }
            else
            {
                OdemeTipi od = OdemeTipleri.Where(x => x.Tip == tip).FirstOrDefault();
                if (od != null)
                {
                    OdemeEkle(od, Cevir.Parse<decimal>(txtInput.Text));
                }
            }

            CalcSubTotal();
        }

        private bool OdemeEkle(OdemeTipi tip, decimal Tutar)
        {
            bool girdi = false;
            foreach (KeyValuePair<OdemeTipi, decimal> item in Odemeler)
            {
                if (item.Key.ID == tip.ID)
                {
                    Odemeler[item.Key] = Tutar;
                    girdi = true;
                    break;
                }
            }

            if (!girdi)
            {
                Odemeler.Add(tip, Tutar);
            }

            decimal yekun = Cevir.Parse<decimal>(lblTutar.Text);
            decimal toplamodeme = Odemeler.Values.Sum();
            if (toplamodeme >= yekun)
                return true;
            else
                return false;
        }

        private void btnToplam_Click(object sender, EventArgs e)
        {
            EvrakKaydet();
        }


    }
}
